From: Carlos Soriano Date: Fri, 5 Sep 2014 17:33:37 +0000 (+0200) Subject: iconGrid: Remove clones on new animation X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~211 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=96a49770a43358458d55405718756b1f6e948d20;p=gnome-shell.git iconGrid: Remove clones on new animation Until now we were waiting the animation to complete to allow the user to make a new animation. This could bring some problems and annoy nervous users. Instead of that, destroy clones on new animations triggers and create a new animation with the new direction. https://bugzilla.gnome.org/show_bug.cgi?id=736148 --- diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js index b7af36512..bd3c453c6 100644 --- a/js/ui/iconGrid.js +++ b/js/ui/iconGrid.js @@ -267,6 +267,7 @@ var IconGrid = new Lang.Class({ this.actor = new St.BoxLayout({ style_class: 'icon-grid', vertical: true }); this._items = []; + this._clonesAnimating = []; // Pulled from CSS, but hardcode some defaults here this._spacing = 0; this._hItemSize = this._vItemSize = ICON_SIZE; @@ -410,8 +411,13 @@ var IconGrid = new Lang.Class({ return this._getVisibleChildren(); }, + _cancelAnimation: function() { + this._clonesAnimating.forEach(clone => { clone.destroy(); }); + this._clonesAnimating = []; + }, + _animationDone: function() { - this._animating = false; + this._clonesAnimating = []; this.emit('animation-done'); }, @@ -419,10 +425,7 @@ var IconGrid = new Lang.Class({ if (animationDirection != AnimationDirection.IN) throw new Error("Pulse animation only implements 'in' animation direction"); - if (this._animating) - return; - - this._animating = true; + this._cancelAnimation(); let actors = this._getChildrenToAnimate(); if (actors.length == 0) { @@ -470,10 +473,7 @@ var IconGrid = new Lang.Class({ }, animateSpring: function(animationDirection, sourceActor) { - if (this._animating) - return; - - this._animating = true; + this._cancelAnimation(); let actors = this._getChildrenToAnimate(); if (actors.length == 0) { @@ -507,6 +507,7 @@ var IconGrid = new Lang.Class({ actor.reactive = false; let actorClone = new Clutter.Clone({ source: actor }); + this._clonesAnimating.push(actorClone); Main.uiGroup.add_actor(actorClone); let [width, height,,] = this._getAllocatedChildSizeAndSpacing(actor);